import moment from "moment";
import Response, { type ResponseType } from "../servies/response";
import dataBaseInstance from "./dataBase";
import { type DB } from './DBType';
/**
 * 添加日期记录
 * @param {{ date : string }} { date } 格式 YYYY-MM-DD 可选值
 * @return.data 成功返回新增成功的dateid number | fail
 */
export async function addDateRecord({ date } : DB.Date) : Promise<ResponseType<number | 'fail'>> {
	const dateRes = await queryDateId({ date });
	if (dateRes.data) {
		return new Response<'fail'>()
			.setData('fail')
			.setErrmsg('已存在该日期的记录！')
			.toJSON();
	}
	const dateId = await dataBaseInstance.date_source.add({ date });
	return new Response<number>()
		.setData(dateId)
		.toJSON();
}
/**
 * 查询往期记录日期对应的id
 * @param {{ date : string }} { date } 格式 YYYY-MM-DD 可选值
 * @return.data dateId number | null
 */
export async function queryDateId({ date } : DB.Date) : Promise<ResponseType<number | null>> {
	const dateItem = await dataBaseInstance.date_source.get({ date })
	return new Response<number | null>()
		.setData(dateItem?.dateId || null)
		.setErrmsg(dateItem ? null : '未查询到该日期记录')
		.toJSON();
}
/**
 * 查询往期日期记录列表
 * @param {string} date 格式 YYYY-MM-DD 可选值，不传时差所有，传日期时查询该日期
 * @return date数组
 */
export async function queryBatchDate() : Promise<ResponseType<Array<string>>> {
	const dateList = await dataBaseInstance.date_source.toCollection().toArray();
	return new Response<Array<string>>()
		.setData(dateList.map(v => v.date).sort((a, b) => moment(a).valueOf() - moment(b).valueOf()))
		.setErrmsg(dateList.length ? null : '暂无记录')
		.toJSON();
}
/**
 * 查询某时间段日期记录集
 * @param {{ startDate : string, endDate : string }} { startDate, endDate } startDate 开始时间 endDate 结束时间 
 * @return.data 日期记录集
 */
export async function batchDate({ startDate, endDate } : { startDate : string, endDate : string }) : Promise<ResponseType<Array<DB.DateSource>>> {
	const dateList = await dataBaseInstance.date_source
		.where('date').between(startDate, endDate, true, true).toArray();
	return new Response<Array<DB.DateSource>>()
		.setData(dateList)
		.setErrmsg(dateList.length ? null : '该时间段内暂无记录')
		.toJSON();
}